data_jan = read.dta13('14_01_Jan_2014_dta.dta')
data_may = read.dta13("14_05_May_2014_dta.dta")

Introduction

To set the scene Eight years before the Russian full-scale invasion into Ukraine, on February 27th of 2014, Vladimir Putin illegally annexed the Ukrainian peninsula of Crimea. His approval ratings soared. I will undertake the task to breakdown and analyze the proposed data of approval ratings accumulated from January 2014 and May 2014 to validate or reject the initial hypothesis, and posit my own hypothesis

Hypotheses

It is proposed in the first hypothesis that the propaganda news has influence over Putin’s Approval. Such propaganda would promote animosity towards the west and in particular Western sanctions imposed against Russia would lead people to view Crimea’s annexation as a blow against their oppressors. I propose two hypotheses first that independent variables such as income, age education, marital status would have an affect on Putin’s Approval. My second hypothesis is that occupation would have a substantial affect Putin’s Approval

 

Data

Putin’s Approval by the number of political events remembered

Below is a motivating chart comparing Putin’s approval from the January 2014 data set to the May 2014 data set based on the political news count.

## Needs more work
jan_apprv = data_jan %>% group_by(pol_news_count) %>% summarize(
  mean(putinapprov, na.rm = T)
  )
# 
may_apprv = data_may %>% group_by(pol_news_count) %>% summarize(
   mean(putinapprov, na.rm = T)
 )
#

colnames(jan_apprv) = c("pol_news_count", "approval")
p_jan_news = 
  ggplot(data = jan_apprv, aes(pol_news_count, approval)) +
  geom_col(width = 0.5, fill="maroon") +
  xlab("Political News Count") +
  ylab("Putin Approval") +
  labs(title = "Jan Approval", subtitle = "From Political News Count") +
  theme_minimal()+
  ylim(0,1) +
  xlim(0, 15)


colnames(may_apprv) = c("pol_news_count", "approval")
p_may_news = ggplot(data = may_apprv, aes(pol_news_count, approval)) +
  geom_col(width = 0.5, fill="maroon") +
  xlab("Political News Count") +
  ylab("Putin Approval") +
  labs(title = "May Approval", subtitle = "From Political News Count") +
  theme_minimal()+
  ylim(0,1) +
  xlim(0, 15)
  
  # scale_x_discrete(limits = c("2", "dgfd", "sds", "ss"))

grid.arrange(p_jan_news, p_may_news, nrow = 1)

 

From both plots, it can be seen that although Putin’s approval does increase the general number of political events remembered, it does not stray too far to create such a significant increase in Putin’s approval. Suggesting that Crimea’s annexation definitely had an impact on how Russian citizens viewed Putin

Some statistical evidence

## Political news count and non-political news count 
## Make regressions


## make plots 
# 

m1 = lm(data = data_jan, putinapprov ~ pol_news_count + non_pol_news_count)

m2 = lm(data = data_may, putinapprov ~ pol_news_count + non_pol_news_count)


stargazer(m1, m2, type = 'html', header = F,
          column.labels = c("\\textit{Jan}", "\\textit{May}"),
          model.names = FALSE,
          dep.var.labels = c("Putin Approval"),
          covariate.labels = c("Political news", "None Political News"))
Dependent variable:
Putin Approval
Jan May
(1) (2)
Political news -0.028** 0.004
(0.011) (0.005)
None Political News 0.046*** 0.006
(0.010) (0.007)
Constant 0.663*** 0.843***
(0.019) (0.014)
Observations 1,584 1,587
R2 0.014 0.002
Adjusted R2 0.013 0.001
Residual Std. Error 0.465 (df = 1581) 0.346 (df = 1584)
F Statistic 11.025*** (df = 2; 1581) 1.402 (df = 2; 1584)
Note: p<0.1; p<0.05; p<0.01
# omit.stat = c("f", "rse"))

 

This is especially noticeable when looking at the regression of the number of political events remembered and non-political events. As in January, the Russian citizen’s interaction with political news had statistical significance, showing a negative impact on his approval, and vice versa when they did not interact with political news, showing positive results on Putin’s approval. However, such variables no longer remain statistically significant. Consequently, the annexation of Crimea may have been viewed as a blow against their western oppressors, who had been imposing sanctions on them for years, or that further territorial expansion would benefit Russia as a whole.

 

Putin’s Approval by Socioeconomic standing (SES)

Below is a motivating chart comparing Putin’s approval from the January 2014 data set to the May 2014 data set based on the three separate levels of SES.

#Numbers for plot Jan
# mean(data_jan$putinapprov, na.rm = T)

Jan_econ = c(mean(subset(data_jan, econ_group1 == 1 | econ_group2 == 1)$putinapprov, na.rm = T), mean(subset(data_jan, econ_group3 == 1 | econ_group4 == 1)$putinapprov, na.rm = T), mean(subset(data_jan, econ_group5 == 1 | econ_group6 == 1)$putinapprov, na.rm = T))

# Number for plot May 
# mean(data_may$putinapprov, na.rm = T)


may_econ = c(mean(subset(data_may, econ_group1 == 1 | econ_group2 == 1)$putinapprov, na.rm = T), mean(subset(data_may, econ_group3 == 1 | econ_group4 == 1)$putinapprov, na.rm = T), mean(subset(data_may, econ_group5 == 1 | econ_group6 == 1)$putinapprov, na.rm = T))

econ_groups = c("low", "medium", "high")
econ_groups_2 = c(1, 2, 3)

temp = cbind(Jan_econ, may_econ, econ_groups, econ_groups_2)

temp = as.data.frame(temp)

temp$may_econ = as.numeric(temp$may_econ)
temp$Jan_econ = as.numeric(temp$Jan_econ)

temp$econ_groups_2 = as.numeric(temp$econ_groups_2)

#temp$may_econ = as.numeric(temp$may_econ)


grid.arrange(
ggplot(data = temp, aes(x = econ_groups_2, y = Jan_econ)) +
  geom_col(width = 0.5, fill="maroon") +
  xlab("Socioeconmic Standing (SES)") +
  ylab("Putin Approval from ") +
  labs(title = "June Approval", subtitle = "From SES") +
  scale_x_discrete(limits = c("Low SES ", "Middle SES", "High SES")) +
  ylim(0, 1) +
  theme_minimal(),
ggplot(data = temp, aes(x = econ_groups_2, y = may_econ)) +
  geom_col(width = 0.5, fill="maroon") +
  xlab("Socioeconmic Standing (SES)") +
  ylab("Putin Approval") +
  labs(title = "May Approval", subtitle = "From SES") +
  scale_x_discrete(limits = c("Low SES ", "Middle SES", "High SES")) +
                     ylim(0, 1) +
  theme_minimal(),
nrow = 1)

 

From both plots, it can be seen that the general wealth of the Russian people does increase across the board, and with that, Putin’s approval ratings. Leading to the observation that Crimea’s annexation is a contributing factor in Putin’s approval ratings.

 

Some statistical evidence of independant variables

model1 = lm(data = data_jan, putinapprov ~ I(income/10000) + age 
            + college + univ + int_news + married + not_rgstrd)

model2 = lm(data = data_may, putinapprov ~ I(income/10000)+ age 
            + college + univ + int_news + married + not_rgstrd)

stargazer(model1,model2, type = 'html', header = F,
          column.labels = c("\\textit{Jan}", "\\textit{May}"),
          model.names = FALSE,
          dep.var.labels = c("Putin Approval"),
          covariate.labels = c("Income","Age", "College Degree",
                               "University Degree",
                               "Online News","Married",
                               "Single"))
Dependent variable:
Putin Approval
Jan May
(1) (2)
Income 0.018*** -0.002
(0.006) (0.004)
Age 0.001 -0.0004
(0.001) (0.001)
College Degree 0.027 0.012
(0.031) (0.023)
University Degree 0.022 0.017
(0.035) (0.025)
Online News -0.013 -0.012
(0.032) (0.022)
Married -0.019 -0.002
(0.029) (0.021)
Single -0.073 -0.073
(0.058) (0.046)
Constant 0.590*** 0.888***
(0.053) (0.041)
Observations 1,302 1,279
R2 0.008 0.003
Adjusted R2 0.003 -0.003
Residual Std. Error 0.468 (df = 1294) 0.342 (df = 1271)
F Statistic 1.575 (df = 7; 1294) 0.515 (df = 7; 1271)
Note: p<0.1; p<0.05; p<0.01
# Explain each variable as statistically significant or not 
# Substantive interpretation if income goes by this much dependent goes up by this much 
# This hypothesis found they are not statistically significant so there is no evidence to support those hypothesis's 
# In may income did not matter due to citizens loving putin 
#

 

Based on the regressions of the independent variables income (divided by 10,000), age, education, and marital status against Putin’s approval, all variables in the January data set were not statistically significant besides income. As in the January data set, whether or not a Russian citizen was of higher or lower socioeconomic status had an effect on whether or not they supported Putin. The same cannot be said in the May data set as income transitions to no longer being statistically significant, meaning that the annexation of Crimea likely had an impact on the citizens as Putin’s proactive political movement made it so the citizens’ socioeconomic status no longer played a role.

Putin’s Approval based on occupation January

Below is a heat map of Putin’s approval from the January 2014 data set based on 7 economic groups (scale of 0-6, 0 is the lowest and 6 is the highest) and 11 occupations.

# Need to group_by all occupations for map 


combo <-
data_jan %>% group_by(occup, econ_group) %>% summarise(
  approv = mean(putinapprov, na.rm = T)
)

combos2 <- spread(combo, key = occup, value = approv)

economic_group = combos2$econ_group
combos2 = combos2[ , -1]
combos2 = as.matrix(combos2)
row.names(combos2) = economic_group
combos2[is.na(combos2)] <- 0

row.names(combos2) = c("Group 0", "Group 1", "Group 2", "Group 3", "Group 4","Group 5","Group 6")
colnames(combos2) = c("Entrepreneur","Manager", "Specialist",
                       "Military Worker", "Minimum Wage Worker",
                       "Manual Worker ", "Student", "Retired (Age)", 
                       "Retired (Disability)", "Housewife", "Unemployed")

p <- plot_ly(x=colnames(combos2), y=rownames(combos2), z = combos2, type = "heatmap",
             colors = 'Blues',
               hovertemplate = paste('<i>Economic_group</i>: %{y}',
                        '<br><b>Occupation</b>: %{x}<br>',
                        '<br><br><b><b>Putin approval</b>: %{z}</b>',
                        '<b></b><extra></extra>')) %>%
    layout(margin = list(l=120))
p

 

Putin’s Approval based on occupation May

Below is a heat map of Putin’s approval from the May 2014 data set based on 7 economic groups (scale of 0-6, 0 is the lowest and 6 is the highest) and 11 occupations.

# Need to group_by all occupations for map 


combo <-
data_may %>% group_by(occup, econ_group) %>% summarise(
  approv = mean(putinapprov, na.rm = T)
)

combos2 <- spread(combo, key = occup, value = approv)

economic_group = combos2$econ_group
combos2 = combos2[ , -1]
combos2 = as.matrix(combos2)
row.names(combos2) = economic_group
combos2[is.na(combos2)] <- 0

row.names(combos2) = c("Group 0", "Group 1", "Group 2", "Group 3", "Group 4","Group 5","Group 6")
colnames(combos2) = c("Entrepreneur","Manager", "Specialist",
                       "Military Worker", "Minimum Wage Worker",
                       "Manual Worker ", "Student", "Retired (Age)", 
                       "Retired (Disability)", "Housewife", "Unemployed")

p <- plot_ly(x=colnames(combos2), y=rownames(combos2), z = combos2, type = "heatmap",
             colors = 'Blues',
               hovertemplate = paste('<i>Economic_group</i>: %{y}',
                        '<br><b>Occupation</b>: %{x}<br>',
                        '<br><br><b><b>Putin approval</b>: %{z}</b>',
                        '<b></b><extra></extra>')) %>%
    layout(margin = list(l=120))
p

 

When comparing both the January and May heat maps, it can be observed that Putin’s approval ratings generously increase across the board. Especially with people in managerial positions. However, what comes as a shock is that Putin’s approval ratings fluctuate when it comes to entrepreneurs in May, which leads to the assumption that after Crimea’s annexation, Russian entrepreneurs likely received more sanctions, causing distaste towards Putin.

Some statistical evidence on occupation

m_1 = lm(data = data_jan, putinapprov ~ d_occup1 + d_occup2
            + d_occup3 + d_occup4 + d_occup5 + d_occup6 + d_occup7 +
              d_occup8 + d_occup9 + d_occup10) #How to add unemployed

m_2 = lm(data = data_may, putinapprov ~ d_occup1 + d_occup2
            + d_occup3 + d_occup4 + d_occup5 + d_occup6 + d_occup7 +
              d_occup8 + d_occup9 + d_occup10)

stargazer(m_1, m_2, type = 'html', header = F,
          column.labels = c("\\textit{Jan}", "\\textit{May}"),
          model.names = FALSE,
          dep.var.labels = c("Putin Approval"),
          covariate.labels = c("Entrepreneur","Manager", "Specialist",
                               "Military Worker",
                               "Minimum Wage Worker","Manual Worker ",
                               "Student", "Retired (Age)", 
                               "Retired (Disability)", "Housewife"))
Dependent variable:
Putin Approval
Jan May
(1) (2)
Entrepreneur -0.026 -0.187***
(0.091) (0.069)
Manager 0.023 -0.035
(0.090) (0.064)
Specialist 0.107 0.009
(0.072) (0.055)
Military Worker 0.055 -0.058
(0.106) (0.083)
Minimum Wage Worker 0.082 0.009
(0.075) (0.055)
Manual Worker -0.007 -0.029
(0.071) (0.053)
Student 0.173** 0.063
(0.086) (0.067)
Retired (Age) 0.054 -0.008
(0.072) (0.054)
Retired (Disability) -0.059 0.042
(0.087) (0.065)
Housewife 0.013 -0.022
(0.085) (0.062)
Constant 0.633*** 0.872***
(0.067) (0.050)
Observations 1,584 1,587
R2 0.014 0.014
Adjusted R2 0.008 0.008
Residual Std. Error 0.466 (df = 1573) 0.345 (df = 1576)
F Statistic 2.231** (df = 10; 1573) 2.231** (df = 10; 1576)
Note: p<0.1; p<0.05; p<0.01

 

Although in the January data set, all types of occupations (compared to the unemployed Russian citizen) had no statistically significant effect on Putin’s approval. In the May data set, entrepreneurs had a negative statistically significant effect on Putin’s approval. This can be observed as the likely implementation of harsher sanctions on entrepreneurs’ foreign businesses due to the annexation of Crimea.

Conclusion

To conclude it can be observed that there is data to support all three hypotheses. Requiring further data to isolate a plethora of confounding variables that have influenced Putin’s overall increase in approval ratings

Appendix

A general summary of the independent variables

 

January Approval summary

# results='asis'

# Divide by 10000 so that I may present data
data_jan$income2 = (data_jan$income/10000) 

data_may$income2 = (data_may$income/10000) 

# Summary of Jan
sum_jan = as.data.frame(dplyr::select(data_jan, c("putinapprov", "income2", "married", "not_rgstrd", "college", "univ", "int_news", "age",)))

# Summary of May 
sum_may = as.data.frame(dplyr::select(data_may, c("putinapprov", "income2", "married", "not_rgstrd", "college", "univ", "int_news", "age")))


# sum_jan %>%
#   knitr::kable(caption = "Summary Approval January", digts = 2)

stargazer(sum_jan,
          type = 'html', header = F,
          covariate.labels = c("Putin Apporval", "Income", "Married",
                               "Single", "College Educated",
                               "Uni Educated", "Online News", "Age"))
Statistic N Mean St. Dev. Min Max
Putin Apporval 1,584 0.677 0.468 0 1
Income 1,312 3.301 2.263 0.080 16.500
Married 1,603 0.600 0.490 0 1
Single 1,603 0.066 0.247 0 1
College Educated 1,603 0.386 0.487 0 1
Uni Educated 1,603 0.319 0.466 0 1
Online News 1,603 0.291 0.454 0 1
Age 1,603 44.354 16.806 18 89
# stargazer(sum_jan, type = 'html', header = F)

# Explain how variables are balanced 
# I divided by 10000 for the ease of interpretation

May Approval Summary

stargazer(sum_may,
          type = 'html', header = F,
          covariate.labels = c("Putin Apporval", "Income", 
                               "Married", "Single", "College Educated",
                               "Uni Educated", "Online News",
                               "Age"))
Statistic N Mean St. Dev. Min Max
Putin Apporval 1,587 0.861 0.346 0 1
Income 1,287 3.757 2.535 0.400 20.000
Married 1,600 0.614 0.487 0 1
Single 1,600 0.055 0.228 0 1
College Educated 1,600 0.388 0.487 0 1
Uni Educated 1,600 0.291 0.454 0 1
Online News 1,600 0.329 0.470 0 1
Age 1,600 44.316 16.433 18 90
# results='asis'

# Explain how variables are balanced 
# I divided by 10000 for the ease of interpretation

It can be observed that the independent variables (marital status, income, age, education, and internet news) with Putin’s approval ratings between the January data set and the May data set are balanced, as there are only minor incremental changes. Therefore, it can be confidently said that of the people who approved of Putin in January, 60% of them were married, 6.6% were single, 38.6% have a college degree when compared to high school-only educated people, 31.9% have a university degree when compared to high school-only educated people, 29.1% were influenced by the news, the average age of the people who approved of Putin was 44 years old, and their average income was around 33,000 RUB (Russian Rouble). In May, these numbers did not change much besides for income, which increased to 37,000 roubles, therefore allowing for the assertion that they are balanced. To further clarify, I have divided the variable income by 10,000 for readability.

DAG

g = dagitty("dag{
            NEWS -> PUTIN
            INCOME -> NEWS
            INCOME -> PUTIN
            }")


coordinates(g) = list(x = c(NEWS = 0, PUTIN = 1, INCOME = 0),
                        y = c(NEWS = 0, PUTIN = 0, INCOME = 1))
plot(g)

 

After further research, it can be understood that income may act as a confounding variable that plays a role in not only in Putin’s approval rating, your occupation, but also each independent variable (age, education, and marital status), especially news. I recognize income as a confounding variable because of its effect on an individual’s (i.e. Russian citizen’s) ability to participate not only in politics but also in day-to-day activities. If you are on the lower end of the SES scale, it will change the way you interpret or use all kinds of media.